#include<bits/stdc++.h>
using namespace std;
struct nd{
    int d,v,a;
}a[100008];
long long c[100008];
long long bef[5000][5000];
long long ena[5000][5000];
double e[5000][5000];
double sv(long long f,long long s,long long l){
    double r=1.0*sqrt(f*f+2*s*l);
    if(f*f+2*s*l<0) return 0;
    return r;
}
int main()
{
 freopen("detect.in","r",stdin);
 freopen("detect.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie();
    cout.tie();
    long long T;
    cin>>T;
    for(long long i=1;i<=T;i++){
        memset(bef,0,sizeof(bef));
        memset(e,0,sizeof(e));
        long long n,m,l,v;
        cin>>n>>m>>l>>v;
        bool af=true;
        for(long long j=1;j<=n;j++){
            cin>>a[j].d>>a[j].v>>a[j].a;
            if(a[j].a!=0) af=false;
        }
        long long maxn=-0x7f7f7f7f,minn=0x7f7f7f7f;
        for(long long j=1;j<=m;j++){
            cin>>c[j];
        maxn=max(c[j],maxn);
        }
        if(af==true){
            long long cnt2=0;
            for(long long j=1;j<=n;j++){
               //     cout<<a[j].v<<' '<<v<<endl;
                if(a[j].v>v&&a[j].d<=maxn) cnt2++;
            }
            cout<<cnt2<<' '<<m-1<<endl;

        }else{
        long long cnt=0;
        for(long long j=1;j<=m;j++){
         //   cout<<c[j]<<' '<<a[j].d<<' '<<a[j].v<<' '<<a[j].a<<endl;
            for(long long k=1;k<=n;k++){
                if(a[k].a==0) e[j][k]=a[k].v;
                else if(c[j]-a[k].d<0) e[j][k]=0;
                else e[j][k]=sv(a[k].v,a[k].a,c[j]-a[k].d);
              //  cout<<a[k].v<<' '<<a[k].a<<' '<<c[j]-a[k].d<<' '<<e[j][k]<<endl;
                if(e[j][k]>v){
                    bef[j][k]=1;
                }
            }
        }
        for(long long j=1;j<=n;j++){
         //   cout<<c[j]<<' '<<a[j].d<<' '<<a[j].v<<' '<<a[j].a<<endl;
            for(long long k=1;k<=m;k++){
                if(bef[k][j]==1){
             //       cout<<j<<endl;
                    cnt++;
                    break;
                }
            }
        }
        cout<<cnt<<' ';

         //   cout<<c[j]<<' '<<a[j].d<<' '<<a[j].v<<' '<<a[j].a<<endl;
            long long cnt3=0;
            for(long long k=1;k<=m;k++){
                bool flag=true;
                for(long long j=1;j<=n;j++){
                        bool flag=false;
                for(long long k2=1;k2<=m;k2++){
                    if(k2==k) continue;

                        if((bef[k][j]==1)&&(bef[k2][j]==1)){
                                flag=true;
                            break;
                        }
                }
                if(flag==false) break;
                }
                if(flag==true) cnt3++;
            }
            cout<<cnt3<<endl;

    }
}
    return 0;
}
